/**
 * 规则管理器
 * 用于管理和获取键的规则
 */
class KeyRuleHolder {
  constructor() {
    // 存储规则的映射表 {appName: {keyType: rule}}
    this.rules = new Map();
  }
  
  /**
   * 根据应用和键获取规则
   * @param {Object} hotKeyModel - 热键模型，包含appName和keyType
   * @returns {Object} 键规则
   */
  getRuleByAppAndKey(hotKeyModel) {
    const appName = hotKeyModel.appName;
    const keyType = hotKeyModel.keyType;
    
    // 如果应用没有规则，使用默认规则
    if (!this.rules.has(appName)) {
      return this._getDefaultRule();
    }
    
    const appRules = this.rules.get(appName);
    
    // 如果应用没有该类型的键规则，使用默认规则
    if (!appRules[keyType]) {
      return this._getDefaultRule();
    }
    
    return appRules[keyType];
  }
  
  /**
   * 设置应用的键规则
   * @param {string} appName - 应用名称
   * @param {string} keyType - 键类型
   * @param {Object} rule - 规则对象
   */
  setRule(appName, keyType, rule) {
    if (!this.rules.has(appName)) {
      this.rules.set(appName, {});
    }
    
    const appRules = this.rules.get(appName);
    appRules[keyType] = rule;
  }
  
  /**
   * 获取默认规则
   * @returns {Object} 默认规则
   * @private
   */
  _getDefaultRule() {
    return {
      interval: 10, // 默认10秒
      threshold: 100 // 默认阈值100
    };
  }
}

// 导出单例
module.exports = new KeyRuleHolder();
